package cn.tips.dmp.supports.status;

/**
 * 全局状态码
 *
 * @author pkb
 */
public enum ApiStatusCode {

    // =============================公用操作处理部分=============================

    /**
     * 任何接口执行成功反馈
     */
    SUCCESS("0", "执行成功!"),

    /**
     * 参数验证失败反馈
     */
    PARAMS_VALID_FAIL("9994", "参数验证失败!"),

    /**
     * 参数验证异常反馈
     */
    BAD_REQUEST("9995", "无效请求!"),

    /**
     * 401 UNAUTHORIZED 反馈
     */
    UNAUTHORIZED("9996", "无操作该资源权限!"),

    /**
     * 404 NOT_FOUND 反馈
     */
    NOT_FOUND("9997", "请求不存在!"),

    /**
     * 405状态下反馈
     */
    METHOD_NOT_ALLOWED("9998", "方法不允许!"),

    /**
     * 任何接口执行失败反馈
     */
    ERROR("9999", "执行失败!"),

    // =============================账户操作相关反馈=============================

    /**
     * 必须登录访问,跳转登录
     */
    ACCOUNT_UNLOGIN("1000", "您还未登录,请先登录!"),

    /**
     * 令牌失效,跳转登陆
     */
    ACCOUNT_TOKEN_INVALID("1001", "登录失效,您已退出登录或长时间未登录,请重新登录!"),

    /**
     * 密码多次输入错误
     */
    ACCOUNT_EXCESSIVE_ATTEMPTS("1002", "密码输入错误超过5次,账号被锁定10分钟!"),

    /**
     * 账户被锁定
     */
    ACCOUNT_LOCKED("1003", "当前账号已被锁定, 请联系管理员!"),

    /**
     * 控制登录人数时,账户已达最大登录人数(踢出后者选项时触发)
     */
    ACCOUNT_MAXIMUM_NUMBER("1004", "该账号已达最大登录人数,您无法登录!"),

    /**
     * 控制登录人数时,被人踢下线
     */
    ACCOUNT_KICKEDOUT("1005", "您的账号已经在其他地方登陆!"),

    /**
     * 用户/密码错误
     */
    ACCOUNT_INVALID("1006", "用户名/密码错误!"),

    /**
     * 当前账户无登录权限
     */
    ACCOUNT_NOPERMISSION("1006", "当前账户无登录权限!"),

    /**
     * 账号不存在
     */
    ACCOUNT_NOT_EXISTED("1010", "该账户不存在!"),

    /**
     * 账号已经存在
     */
    ACCOUNT_EXISTED("1007", "该账户已经存在!"),

    /**
     * 账号无管理员角色
     */
    ACCOUNT_NOT_ADMIN_ROLE("1011", "该账户无管理员角色!"),
    /**
     * 更改密码时,原始密码不正确
     */
    ACCOUNT_OLD_PWD_INVALID("1008", "原始密码不正确!"),

    /**
     * 登录渠道不支持
     */
    ACCOUNT_CHANNEL_NOT_ALLOWED("1009", "当前账户无登录权限!"),

    // =============================机构下部门操作相关反馈=============================

    /**
     * 部门名称已经存在!
     */
    DEPT_TITLE_EXISTED("2000", "部门名称已经存在!"),

    /**
     * 部门编码已经存在!
     */
    DEPT_CODE_EXISTED("2001", "部门编码已经存在!"),

    // =============================机构下角色操作相关反馈=============================

    /**
     * 部门名称已经存在!
     */
    ROLE_NAME_EXISTED("2010", "角色名称已经存在!"),

    /**
     * 部门编码已经存在!
     */
    ROLE_CODE_EXISTED("2011", "角色编码已经存在!"),

    // =============================机构操作相关反馈=============================

    /**
     * 机构中文名称已经存在!
     */
    ORG_NAME_ZH_EXISTED("2020", "机构中文名称已经存在!"),

    /**
     * 机构英文名称已经存在!
     */
    ORG_NAME_EN_EXISTED("2021", "机构英文名称已经存在!"),

    /**
     * 关键词重复
     */
    KEYWORD_EXISTED("2022", "关键词在系统中已经存在!"),

    // =============================验证码相关=============================

    /**
     * 不支持该验证码类型
     */
    CAPTCHA_TYPE_NOT_SUPPORT("2030", "不支持该验证码类型!"),

    /**
     * 验证码发送时不存在该用户
     */
    CAPTCHA_ACCOUNT_NOT_EXISTED("2031", "不存在该用户或用户已经被锁定,无法执行验证码发送!"),

    /**
     * 验证码短信发送失败
     */
    CAPTCHA_SEND_ERROR("2032", "验证码发送失败!"),

    /**
     * 无效验证码
     */
    CAPTCHA_INVALID("2033", "无效验证码!"),

    /**
     * 发送邀请短信失败
     */
    SEND_INVATE_MESSAGE_ERROR("2034", "发送邀请短信失败!"),

    /**
     * 验证码错误
     */
    CAPTCHA_ERROR("2035", "验证码错误!"),

    /**
     * 验证码过期
     */
    CAPTCHA_EXPIRED("2036", "验证码过期，请重新点击获取!"),

    // =============================机构下专家相关=============================

    /**
     * 专家已存在该智库中
     */
    EXPERT_EXISTED_IN("2040", "专家已存在该智库中!"),

    /**
     * 专家已存在于云数据库中
     */
    EXPERT_EXISTED("2041", "专家已存在于云数据库中!"),

    // =============================成果=============================
    /**
     * 成果名称已经存在!
     */
    FRUIT_NAME_EXISTED("6002", "成果名称已经存在!"),


    /**
     * 课题名称已经存在!
     */
    TOPIC_NAME_EXISTED("6100", "课题名称已经存在!"),

    /**
     * 新增课题失败，请联系技术人员!
     */
    TOPIC_CREATE_EXISTED("6101", "新增课题失败，请联系技术人员小丁!"),

    /**
     * 删除课题失败，请联系技术人员!
     */
    TOPIC_DELETE_EXISTED("6102", "删除课题失败，请联系技术人员小丁!"),

    /**
     * 根据id未查找到课题信息
     */
    CANT_NOT_FIND_BY_TOPIC_ID("6103", "根据id未查找到课题信息，请联系技术人员小丁!"),

    /**
     * 申请课题失败
     */
    TOPIC_IAPPLY_FAILED("6104", "申请课题失败，请联系技术人员小丁!"),

    /**
     * 请勿重复申请课题
     */
    TOPIC_HAS_IAPPLYED("6105", "请勿重复申请课题!"),

    /**
     * 未找到申请记录
     */
    CAN_NOT_FIND_APPLY_RECORD("6106", "未找到申请记录!"),

    /**
     * 课题id不存在
     */
    TOPIC_ID_NOT_EXISTED("6107", "课题id不存在，请联系技术人员小丁!"),

    /**
     * 请为当前课题指派专家
     */
    TOPIC_NOT_ASSIGN_EXPERTS("6108", "请为当前课题指派专家!"),

    /**
     * 无法删除已经被专家申请的课题
     */
    CAN_NOT_DEL_ASSIGN_TOPIC("6109", "无法删除已经被专家申请的课题!"),

    /**
     * 无法删除已经被成果关联的课题
     */
    CAN_NOT_DEL_LINK_TOPIC("6110", "无法删除已被成果关联的课题!"),

    /**
     * 修改状态失败!
     */
    UPDATE_MANUSCRIPTPO_STATUS_FAILED("6201", "修改状态失败!"),

    /**
     * 删除字典表失败!
     */
    SYSDICT_DEL_FAILED("7003", "删除字典表失败!"),

    /**
     * 字典名称已经存在!
     */
    SYSDICT_CREATE_FAILED("7000", "添加字典表失败!"),

    /**
     * 字典名称已经存在!
     */
    SYSDICT_NAME_EXISTED("7001", "字典名称已经存在!"),

    /**
     * 字典编码已经存在!
     */
    SYSDICT_CODE_EXISTED("7002", "字典编码已经存在!");
    /**
     * 状态码
     */
    private String code;

    /**
     * 状态码描述
     */
    private String description;

    ApiStatusCode(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }
}
